1. 题目
给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1 和 0。
示例 1: 输入: a = "11", b = "1" 输出: "100"
示例 2: 输入: a = "1010", b = "1011" 输出: "10101"
提示:
每个字符串仅由字符 '0' 或 '1' 组成。 1 <= a.length, b.length <= 10^4 字符串如果不是 "0" ,就都不含前导零。
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/add-binary 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题思路
先将两字符串用前导0补至同一长度,再做加法。
3. 代码
class Solution {
public:
string addBinary(string a, string b) {
string res;
int len;
if(a.size()>b.size()) {
string tmp(a.size()-b.size(),'0');
len=a.size();
b=tmp+b;
}else {
string tmp(b.size()-a.size(),'0');
len=b.size();
a=tmp+a;
}
int carry=0,num=0;
for(int i=len-1;i>=0;--i){
num=a[i]-'0'+b[i]-'0'+carry;
res.push_back((num%2)+'0');
carry=num/2;
}
if(carry>0) res.push_back('1');
reverse(res.begin(),res.end());
return res;
}
};